const multer = require('multer');
const path = require('path');
const Photo = require('../models/Photo');

// 配置multer存储
const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, 'uploads/');
  },
  filename: (req, file, cb) => {
    const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
    cb(null, uniqueSuffix + path.extname(file.originalname));
  }
});

// 创建multer实例
const upload = multer({ 
  storage: storage,
  limits: {
    fileSize: 5 * 1024 * 1024 // 限制文件大小为5MB
  },
  fileFilter: (req, file, cb) => {
    // 只允许图片文件
    if (file.mimetype.startsWith('image/')) {
      cb(null, true);
    } else {
      cb(new Error('只允许上传图片文件'));
    }
  }
});

// 上传照片
const uploadPhoto = async (req, res) => {
  try {
    // 检查是否有文件上传
    if (!req.file) {
      return res.status(400).json({ error: '请选择要上传的照片' });
    }

    const { user_id } = req.body;
    
    // 检查用户ID
    if (!user_id) {
      return res.status(400).json({ error: '请提供用户ID' });
    }

    // 保存照片信息到数据库
    const photo = await Photo.create(user_id, req.file.path, null);

    res.status(201).json({
      id: photo.id,
      user_id: photo.user_id,
      file_path: photo.file_path
    });
  } catch (err) {
    console.error('上传照片错误:', err);
    res.status(500).json({ error: '上传照片失败' });
  }
};

// 获取照片信息
const getPhoto = async (req, res) => {
  try {
    const { id } = req.params;

    // 获取照片
    const photo = await Photo.findById(id);
    if (!photo) {
      return res.status(404).json({ error: '照片不存在' });
    }

    res.json(photo);
  } catch (err) {
    console.error('获取照片信息错误:', err);
    res.status(500).json({ error: '获取照片信息失败' });
  }
};

// 获取用户的所有照片
const getUserPhotos = async (req, res) => {
  try {
    const { userId } = req.params;

    // 获取用户的所有照片
    const photos = await Photo.findByUserId(userId);

    res.json(photos);
  } catch (err) {
    console.error('获取用户照片错误:', err);
    res.status(500).json({ error: '获取用户照片失败' });
  }
};

module.exports = {
  upload: upload.single('photo'),
  uploadPhoto,
  getPhoto,
  getUserPhotos
};